package com.atguigu.boot.config;

import com.atguigu.boot.bean.Car;
import com.atguigu.boot.bean.Pet;
import com.atguigu.boot.bean.User;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/*1.配置类里面使用@Bean标注在方法上给容器注册组件(类),默认也是单实例的
*2.配置类本身也是组件
* 3.@Configuration(proxyBeanMethods = true)
* proxyBeanMethods:代理Bean的方法
*外部无论对配置类中的组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
* 如果@Configuration(proxyBeanMethods = true)
* 代理对象调用方法,SpringBoot总会检查这个组件是否在容器内,如果有就用,没有就再创建新的-Full模式（默认）
* 如果是false,则跳过检查,直接创建,启动快-Lite模式
* */
@EnableConfigurationProperties(Car.class)//开启配置指定类(可以指定任意类不一定是自定义类)的配置文件
@Configuration(proxyBeanMethods = true)//告诉SptingBoot这是一个配置类==配置文件
public class MyConfig {

    @Bean//给容器中添加组件,以方法名作为组件的id
    //返回类型就是组件类型.返回的值,就是组件在容器中的实例
    public User user01(){

        return new User("zhangsan",18);
    }
    @Bean
    public Pet tomcatPet(){
        return new Pet("tomcat");
    }

}
